﻿using SIIE_ERP.Codigo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SIIE_ERP.BaseDatos
{
    public static class Documentos_InventariosExistencias
    {
        #region SELECT

        /// <summary>
        /// Método para actualizar la tabla dbo_Fact_Existencias, la cantidad puede ser negativa para el caso donde sea una Salida de Almacén 
        /// </summary>
        /// <param name="RFC"></param>
        /// <param name="Usuario"></param>
        /// <param name="Id_Almacen"></param>
        /// <param name="Id_Articulo"></param>
        /// <param name="Cantidad"></param>
        /// <returns></returns>
        public static Respuesta ActualizaInserta_Existencia(
            
            string RFC,
            string Usuario,
            int Id_Almacen,
            int Id_Articulo,
            double Cantidad
        )
        {
            string Query1 = @"

                SELECT * FROM dbo_Fact_Existencias
                    WHERE Id_Almacen = @@Id_Almacen AND Id_Articulo = @@Id_Articulo
            ".Replace("@@Id_Almacen", Id_Almacen.ToString())
             .Replace("@@Id_Articulo", Id_Articulo.ToString());

            DataTable Existe = SrvDB.ExecuteQuery_Get(Query1);

            if (Existe.Rows.Count == 0)
            {
                string QueryInsertFact = @"
                   INSERT INTO dbo_Fact_Existencias
                    (
                        Id_Existencia,
                        RFC,
                        Id_Almacen,
                        Id_Articulo,
                        Cantidad,
                        Fecha_Mantto,
                        Usuario_Mantto
                    )
                    VALUES 
                    (
                        IIF(DCount('*', 'dbo_Fact_Existencias') = 0, 1, DMax('Id_Existencia', 'dbo_Fact_Existencias') + 1),
                        '@@RFC',
                        @@Id_Almacen,
                        @@Id_Articulo,
                        @@Cantidad,
                        NOW(),
                        '@@Usuario_Mantto'
                    )
                   ".Replace("@@RFC", RFC)
                    .Replace("@@Id_Almacen", Id_Almacen.ToString())
                    .Replace("@@Id_Articulo", Id_Articulo.ToString())
                    .Replace("@@Cantidad", "0")
                    .Replace("@@Usuario_Mantto", Usuario);

                Respuesta r1 = SrvDB.ExecuteQuery_Insert(QueryInsertFact);
                if (r1.Id != 1)
                    return r1;                   
            }

            string QueryUpdateFact = @"
                   UPDATE dbo_Fact_Existencias                    
                        
                        SET 

                        Cantidad = Cantidad + @@Cantidad

                        WHERE Id_Almacen = @@Id_Almacen AND Id_Articulo =  @@Id_Articulo                        
                    
                   ".Replace("@@Id_Almacen", Id_Almacen.ToString())
                    .Replace("@@Id_Articulo", Id_Articulo.ToString())
                    .Replace("@@Cantidad", Cantidad.ToString())
                    .Replace("@@Usuario_Mantto", Usuario);
            return SrvDB.ExecuteQuery_Update(QueryUpdateFact);
        }

        #endregion
    }
}

